/////////////////////////////////////////////////////////////////////////////
/** \file  
 *  \brief detector contruction
 *  \author Hans Boie
 */
/////////////////////////////////////////////////////////////////////////////
 

#ifndef DetectorConstruction_H
#define DetectorConstruction_H 1

#include "globals.hh"
#include "G4Transform3D.hh"
#include "G4VUserDetectorConstruction.hh"
#include "G4SDManager.hh"
#include "G4Material.hh"
#include "G4Box.hh"
#include "G4Tubs.hh"
#include "G4Cons.hh"
#include "G4Polycone.hh"
#include "G4UnionSolid.hh"
#include "G4SubtractionSolid.hh"
#include "G4LogicalVolume.hh"
#include "G4ThreeVector.hh"
#include "G4PVPlacement.hh"
#include "G4UIcommand.hh"
#include "G4NistManager.hh"

#include <vector>
#include <strstream>

#include "math.h"

#include "MiniBallDetectorArray.hh"
#include "MiniBallMaterial.hh"
#include "MiniBallWorld.hh"

#include "Data.hh"
#include "HistoManager.hh"
#include "SensitiveDetector.hh"

// include-files for visualisation
#ifdef G4VIS_USE
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#endif

#define MINIBALL_CAPSULE true
#define MINIBALL_CRYOWALL true

class G4VPhysicalVolume;
class HistoManager;
class MiniBallDetectorArray;

///arrangement of several cryostats
class DetectorConstruction : public G4VUserDetectorConstruction
{
public:
  // constructors
  DetectorConstruction(HistoManager*, Data*);
  // destructor
  ~DetectorConstruction();

  ///this actually constructs the whole detector 
  G4VPhysicalVolume* Construct();
    

private:
  G4VPhysicalVolume* mother;
  
  ///histogram manager
  HistoManager* histoManager;
  Data* data;

  MiniBallDetectorArray* miniball;
};

#endif






